﻿package net.wangit.context;

import java.io.File;
import java.io.Serializable;
import java.util.List;

import net.wangit.MapList;
import net.wangit.Visitor;
import net.wangit.jdbc.Table;


/**
 * 上下文数据集合，存储了request、session等数据。
 * 
 * @author watson Feb 24, 2010
 */
public interface ActionContext extends Serializable {

	// 取得Action自定义参数。
	public abstract String getActionParameter();

	// 取得Action执行结果对象。
	public abstract ActionResult getActionResult();

	// 取得定制属性，此属性通过setAttribute()设置。
	public abstract Object getAttribute(String key);

	// 取得上传的文件对象，存在多个时返回第一个。
	public abstract File getFile(String key);

	// 取得上传的文件对象数组。
	public abstract File[] getFiles(String key);

	// 得HttpServletRequest参数值，指定序号的值不存在时返回null。
	public abstract String getRequestParameter(int i, String key);

	// 取得HttpServletRequest参数值，存在多个值时返回第一个。
	public abstract String getRequestParameter(String key);

	// 取得HttpServletRequest参数值，存在多个值时返回第一个，值不存在时返回默认值。
	public abstract String getRequestParameter(String key, String defaultValue);

	// 取得HttpServletRequest参数值，并且转换为double类型，值不存在或为空时返回默认值。
	public abstract double getRequestParameterDouble(String key,
			double defaultValue);

	// 取得HttpServletRequest参数值，并且转换为int类型，值不存在或为空时返回默认值。
	public abstract int getRequestParameterInt(String key, int defaultValue);

	// 取得HttpServletRequest参数值的数组。
	public abstract String[] getRequestParameters(String key);

	// 获取提交表单内的某单元数据，数据中包含了此单元所有有值的元素，并可以通过“主键字段名.k”获得更新前的主键值。
	public abstract MapList getRequestUnitData(String domain, String unitId);

	// 取得HttpSession参数值。
	public abstract Object getSessionAttribute(String key);

	// 取得HttpSession参数值，并转换为String类型，值不存在时返回默认值。
	public abstract String getSessionAttribute(String key, String defaultValue);

	// 取得Table对象集合，Action元素如果指定了命令行，系统会自动生成需要执行的Table对象集合。
	public abstract List<Table> getTables();

	// 取得访问者对象。
	public abstract Visitor getVisitor();

	// 设置定制的属性，可用于进程间传递参数。
	public abstract void setAttribute(String key, Object value);

	// 按序号修改指定参数的值，参数不存在或序号不合法时不做任何操作。
	public abstract void setRequestParameter(int i, String key, String value);

	// 修改/添加指定参数的值，如果有多个值时，修改第一个，参数不存在时创建此参数。
	public abstract void setRequestParameter(String key, String value);

	// 设置HttpSession参数值，参数存在时覆盖。
	public abstract void setSessionAttribute(String key, Object value);
}
